<

RenderBox のドライ レイアウトのサポート

まとめ

という名前の新しいメソッドcomputeDryLayoutに追加されましたRenderBoxプロトコル。 のサブクラスRenderBox正しくレポートするために実装することが期待されています のセットが与えられた場合、希望するサイズBoxConstraints本質的な間 計算。実装するサブクラスcomputeDryLayoutもう必要ありません オーバーライドperformResize

コンテクスト

新しい方法、computeDryLayoutに追加されました。RenderBoxプロトコルへの の固有サイズを正しく計算するRenderParagraphWidgetSpan子供たちとRenderWrap。メソッドは次のセットを受け取ります。94ca093​​5-c779-46d2-a568-0ae805196414と 結果のサイズを計算することが期待されますRenderBox変えずに あらゆる内部状態。基本的には予行演習ですperformLayoutそれだけ 結果のサイズを計算し、子を配置しません。のcomputeDryLayoutメソッドは組み込みプロトコルの一部です (「RenderBox.computeMinIntrinsicWidthと友達)。

変更内容の説明

のサブクラスRenderBox新しいものをオーバーライドする必要があるcomputeDryLayout方法 の子孫として使用される場合RenderObject本質的なクエリをクエリする可能性があります その子のサイズ。これを行うウィジェットの例は次のとおりです。IntrinsicHeightIntrinsicWidth

デフォルトの実装は、RenderBox.performResizeサイズも使ってます によって計算されるcomputeDryLayoutサイズ変更を実行します。オーバーライドperformResizeしたがって、もはや必要ありません。

移行ガイド

すでにオーバーライドされているサブクラスperformResize簡単に移行できます 関数シグネチャの変更void performResize()Size computeDryLayout(BoxConstraints constraints)そして返却することで、 サイズを割り当てる代わりに計算されたサイズsizeセッター。老人 の実装performResize取り外すことができます。

移行前のコード:

  @override
  void performResize() {
     size = constraints.biggest;
  }

移行後のコード:

  // This replaces the old performResize method.
  @override
  Size computeDryLayout(BoxConstraints constraints) {
     return constraints.biggest;
  }

サブクラスがオーバーライドしない場合performResize、の実装computeDryLayoutから抽出する必要がありますperformLayout方法。 基本的、computeDryLayoutすべての仕事をする必要があるperformLayoutやってる のサイズを把握するためにRenderBox。ただし、それを割り当てる代わりに、 にsizesetter を使用すると、計算されたサイズが返されます。もしもcomputeDryLayoutは子のサイズを知る必要があるため、呼び出してそのサイズを取得する必要があります。getDryLayout電話をかける代わりに子供に話しかけるlayout

何らかの理由でドライレイアウトを計算できない場合は、computeDryLayout電話しなければなりませんdebugCannotComputeDryLayoutアサート内からダミーを返します のサイズconst Size(0, 0)。たとえば、ドライレイアウトを計算することは不可能です のサイズの場合RenderBox子のベースライン メトリクスに依存します。

  @override
  Size computeDryLayout(BoxConstraints constraints) {
    assert(debugCannotComputeDryLayout(
      reason: 'Layout requires baseline metrics, which are only available after a full layout.'
    ));
    return const Size(0, 0);
  }

タイムライン

リリースされたバージョン: 1.25.0-4.0.pre
安定版リリース: 2.0.0

参考文献

API ドキュメント:

  • RenderBox
  • computeMinInstrinsicWidth
  • computeDryLayout
  • getDryLayout
  • performResize
  • RenderWrap
  • RenderParagraph

関連する問題:

  • 問題 48679

関連する PR:

  • RenderParagraph および RenderWrap の組み込み関数を修正
a2b1a184-a921-476d-ビーズ-deafa5a21392